package ltd.hanamaki.study.array;

/**
 * 稀疏数组
 */
public class Demo08 {

    public static void main(String[] args) {
        /* 创建 棋盘 11*11   1代表白子  2代表黑子 */
        int array[][] = new int[11][11];
        /* 下棋   */
        array[1][2] = 1;
        array[2][3] = 2;
        array[4][3] = 2;
        array[5][3] = 2;
        array[9][3] = 2;

        /* 打印原始数组的 格式  */
        for (int[] ints : array) {
            for (int anInt : ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }

        /* 如果 想要转换成 稀疏数组 要想获取 有效值的 个数  */
        int count = 0;/* 有效值的 个数 */
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array.length; j++) {
                if (array[i][j] != 0) {
                    count++;
                }
            }
        }

        System.out.println("有效值的个数" + count);

        /* 写出 稀疏数组的 格式  */
        Object array1[][] = new Object[count + 2][3];
        array1[0][0] = "行";
        array1[0][1] = "列";
        array1[0][2] = "有效值";
        array1[1][0] = array.length;
        array1[1][1] = array[1].length;
        array1[1][2] = count;

        /* 打印稀疏数组的 格式  */
        for (Object[] ints : array1) {
            for (Object anInt : ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }

        /* 定义 有效值开始存放的行 */
        int line = 2;
        /* 如何 将 原始 数组中的 有效值的信息 存放在稀疏数组中？ */
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                if (array[i][j] != 0) {
                    array1[line][0] = i;
                    array1[line][1] = j;
                    array1[line][2] = array[i][j];
                    line++;
                }
            }
        }

        /* 打印稀疏数组的 格式  */
        for (Object[] ints : array1) {
            for (Object anInt : ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }
        int line1 = (int) array1[1][0];
        int col = (int) array1[1][1];
        /* 将 稀疏数组 转换为 原始 数组 */
        int array3[][] = new int[line1][col];
        for (int i = 2; i < array1.length; i++) {
            array3[(int) array1[i][0]][(int) array1[i][1]] = (int) array1[i][2];
        }

        /* 打印原始数组的 格式  */
        for (int[] ints : array3) {
            for (int anInt : ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }
    }
}
